/*选择排序，其实就很冒泡排序一样。冒泡排序是每次都从左到右，把为排序范围内的元素往后面推。
而选择排序其实是每次定 一个位置，把最小的元素放到这个位置，然后从下一个位置开始，重复这个过程。*/


#include<stdio.h>


void selection_sort_up(int arr[], int n)
{
    int i = 0;
    int j = 0;
    int temp = 0;
    for(;i<n-1;i++){                               // i 表示这次循环是在确定哪一个。 i:[0,n-1) 因为n-2 确定了，n-1 自然就确定了。
        for(j=i+1;j<n;j++){                         // j 是和i 作比较的， j:[i+1,n-1].
            if(arr[i]>arr[j]){                      //选择最小的放到i ，所以从左到右是升序。
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
}


void selection_sort_down(int arr[], int n)
{
    int i = 0;
    int j = 0;
    int temp = 0;
    for(;i<n-1;i++){                               // i 表示这次循环是在确定哪一个。 i:[0,n-1) 因为n-2 确定了，n-1 自然就确定了。
        for(j=i+1;j<n;j++){                         // j 是和i 作比较的， j:[i+1,n-1].
            if(arr[i]<arr[j]){                      //选择最大的放到i ，所以从左到右是降序。
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
}


int main() {
    int arr[] = {5, 4, 3, 2, 1};
    int n = sizeof(arr) / sizeof(arr[0]);  // 计算数组长度

    selection_sort_up(arr, n);  // 调用排序函数
    selection_sort_down(arr, n);

    // 打印排序结果
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}